package com.example.app.controller;

import com.example.app.entity.Article;
import com.example.app.util.AjaxResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

/**
 * @author wangzhuangzhuang
 * @DESC:
 * @date 2022-02-09 15:59
 * 实现一个简单的RESTful接口
 * - 增加一篇Article， 使用POST方法
 * - 删除一篇Article， 使用DELETE方法
 * - 更新一篇Article， 使用PUT方法
 * - 获取一篇Article， 使用GET方法
 */
@Slf4j
@RestController
@RequestMapping("/rest")
public class ArticleController {

	// 获取一篇Article，使用GET方法，根据id查询一篇文章
	// @RequestMapping(value = "/articles/{id}", method = RequestMethod.GET)
	@GetMapping("/articles/{id}")
	public AjaxResponse getArticle(@PathVariable("id") Long id) {

		// 使用Lombok提供的builder构建对象
		Article article = Article.builder()
				.id(id)
				.author("zimug")
				.content("Spring Boot 从青铜到王者！")
				.createTime(new Date())
				.title("t1")
				.build();
		log.info("article: {}", article);

		return AjaxResponse.success(article);
	}

	// 增加一篇Article，使用POST方法（@RequestBody方式接受参数）
	// @RequestMapping(value = "/articles", method = RequestMethod.POST)
	@PostMapping("/articles")
	public AjaxResponse saveArticle(@RequestBody Article article,
	                                @RequestHeader String headerInfo){
		// 使用lombok的Slf4j注解，直接使用log变量打印日志
		log.info("saveArticle: " + article);
		return AjaxResponse.success();
	}

	//增加一篇Article ，使用POST方法(RequestParam方式接收参数)
  /*@PostMapping("/articles")
  public AjaxResponse saveArticle(@RequestParam  String author,
                                  @RequestParam  String title,
                                  @RequestParam  String content,
                                  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
                                  @RequestParam  Date createTime){

    log.info("saveArticle:" + createTime);
    return AjaxResponse.success();
  }*/

	// 更新一篇Article，使用PUT方法，以id为主键进行更新
	// @RequestMapping(value = "/articles", method = RequestMethod.PUT)
	@PutMapping("/articles")
	public AjaxResponse updateArticle(@RequestBody Article article){
		if(article.getId() == null){
			// article.id是必须传递的参数 如果为null
			// TODO 抛出自定义异常
		}
		log.info("updateArticle: " + article);
		return AjaxResponse.success();
	}

	// 删除一篇Article，使用DELETE方法，参数是id
	// @RequestMapping(value = "/articles/{id}", method = RequestMethod.DELETE)
	@DeleteMapping("/articles/{id}")
	public AjaxResponse deleteArticle(@PathVariable("id") Long id){
		log.info("deleteArticle: {}" , id);
		return AjaxResponse.success();
	}

}